www.gusucode.com > VC++下的串行数据通信以及八个串口编程实例- > VC++下的串行数据通信以及八个串口编程实例-/第7章 智能安防报警系统/CommSettingDlg.cpp
// CommSettingDlg.cpp : implementation file // #include "stdafx.h" #include "Alert.h" #include "CommSettingDlg.h" #include "regKey.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif CString GetSetting(CString key, CString ValueName) { CString res; DWORD count=100; CRegKey regKey; regKey.Open(HKEY_CURRENT_USER,"Software\\Alert\\"+key); regKey.QueryValue(res.GetBuffer(100),ValueName,&count); res.ReleaseBuffer(); regKey.Close(); return res; } void SaveSetting(CString key,CString ValueName,CString value) { CRegKey regKey; regKey.Create(HKEY_CURRENT_USER,"Software\\Alert\\"+key); regKey.Open(HKEY_CURRENT_USER,"Software\\Alert\\"+key); regKey.SetValue(value,ValueName); regKey.Close(); } ///////////////////////////////////////////////////////////////////////////// // CCommSettingDlg dialog CCommSettingDlg::CCommSettingDlg(CWnd* pParent /*=NULL*/) : CDialog(CCommSettingDlg::IDD, pParent) { //{{AFX_DATA_INIT(CCommSettingDlg) m_strChoose = _T("串口1"); m_strDataBits = _T("8"); m_strParity = _T("N"); m_strSpeed = _T("9600"); m_strStopBits = _T("1"); //}}AFX_DATA_INIT m_nFlow=0; } void CCommSettingDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CCommSettingDlg) DDX_Text(pDX, IDC_COMMCHOOSE, m_strChoose); DDX_CBString(pDX, IDC_DATABITS, m_strDataBits); DDX_CBString(pDX, IDC_PARITY, m_strParity); DDX_CBString(pDX, IDC_SPEED, m_strSpeed); DDX_CBString(pDX, IDC_STOPBITS, m_strStopBits); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CCommSettingDlg, CDialog) //{{AFX_MSG_MAP(CCommSettingDlg) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CCommSettingDlg message handlers BOOL CCommSettingDlg::OnInitDialog() { CString commSetting = GetSetting(CString("PortSetting\\Com")+m_strChoose.Right(1)+"\\", "commSetting"); CString commHandShaking = GetSetting(CString("PortSetting\\Com")+m_strChoose.Right(1)+"\\", "commHandshaking"); if(commSetting!="" && commHandShaking!="") { int index1,index2,index3; index1=commSetting.Find(',',0); index2=commSetting.Find(',',index1+1); index3=commSetting.Find(',',index2+1); m_strSpeed=commSetting.Left(index1); m_strParity=commSetting.Mid(index1+1,index2-index1-1); char c=m_strParity.GetAt(0); switch(c) { case 'N': m_strParity="None"; break; case 'O': m_strParity="Odd"; break; case 'E': m_strParity="Even"; break; case 'M': m_strParity="Mark"; break; case 'S': m_strParity="Space"; break; default: m_strParity="None"; break; } m_strDataBits=commSetting.Mid(index2+1,index3-index2-1); m_strStopBits=commSetting.Mid(index3+1); m_nFlow = atoi(commHandShaking.GetBuffer(10)); } CDialog::OnInitDialog(); // TODO: Add extra initialization here ((CButton*)GetDlgItem(IDC_RADIO1+m_nFlow))->SetCheck(1); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CCommSettingDlg::OnOK() { // TODO: Add extra validation here if (!UpdateData(TRUE)) { TRACE0("UpdateData failed during dialog termination.\n"); // the UpdateData routine will set focus to correct item return; } m_nFlow=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO4)-IDC_RADIO1; CString commSetting=m_strSpeed+","+m_strParity.Left(1)+","+m_strDataBits+","+m_strStopBits; CString commHandShaking; itoa(m_nFlow,commHandShaking.GetBuffer(10),10); commHandShaking.ReleaseBuffer(); SaveSetting(CString("PortSetting\\Com")+m_strChoose.Right(1),"commSetting",commSetting); SaveSetting(CString("PortSetting\\Com")+m_strChoose.Right(1),"commHandShaking",commHandShaking); EndDialog(IDOK); }